<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    //工厂模式 ?要使用工厂模式。 
            /*   工厂模式类似于现实生活中的工厂可以产生大量相似的商品，
             去做同样的事情，实现同样的效果;   
             简单的工厂模式可以理解为解决多个相似的问题;这也是她的优点;比如如下代码：*/

    //工厂模式 批量创造对象(构造函数就是内置工厂函数)
     
    function CreatePerson(name,age,sex) {
        //var obj = new Object();
        var obj = {};                  //原料
        obj.name = name;               //加工
        obj.age = age;                 //加工 
        obj.sex = sex;                 //加工
        obj.sayName = function(){      //加工  
            return this.name;
        }
        return obj;                    //出厂 
    }

    var p1 = new CreatePerson("longen",'28','男');
    var p2 = new CreatePerson("tugenhua",'27','女');

    console.log(p1.name);      // longen
    console.log(p1.age);       // 28
    console.log(p1.sex);       // 男
    console.log(p1.sayName()); // longen
    
    console.log(p2.name);      // tugenhua
    console.log(p2.age);       // 27   
    console.log(p2.sex);       // 女
    console.log(p2.sayName()); // tugenhua
    
    //返回都是object 无法识别对象的类型 不知道他们是哪个对象的实列
    console.log(typeof p1);  // object
    console.log(typeof p2);  // object
    console.log(p1 instanceof Object); // true

    // 如上代码：函数CreatePerson能接受三个参数name,age,sex等参数，可以无数次调用这个函数，每次返回都会包含三个属性和一个方法的对象。
    // 工厂模式是为了解决多个类似对象声明的问题;也就是为了解决实列化对象产生重复的问题。
    // 优点：能解决多个相似的问题。
    // 缺点：不能知道对象识别的问题(对象的类型不知道)。

    //https://blog.csdn.net/weixin_33929309/article/details/86269358  博客 
    
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------    
    //案例2  
    //构造函数模式代码
    var Car = (function () {
    var Car = function (model, year, miles) {
        this.model = model;
        this.year = year;
        this.miles = miles;
    };
    return function (model, year, miles) {
        return new Car(model, year, miles);
    };
    })();

    var tom = new Car("Tom", 2009, 20000);
    var dudu = new Car("Dudu", 2010, 5000);
    console.log(tom);                       //{"model": "Tom", "year": 2009, "miles": 20000}
    console.log(dudu)                       // 
  
   
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
    //案例3 简版 



</script>